#!/usr/bin/python3
# -*- coding:utf-8 -*-
# @Time   :2021/12/13
# @Author :songtx
# @File   :dox_enquiry.py


import can


def dox_command(input_x, err_x):    # 需要输出的DOx点装入list[1,2,3],范围1～32
    bus = can.Bus(interface='socketcan', channel='can0', receive_own_messages=eval('False'))
    d = 0b00
    output_dox = input_x + err_x  # 预留硬件驱动和报警驱动
    for i in output_dox:          # 遍历从list取值
        a = int(i)                # 取出的数值str转int
        b = 0b1                   # 从初始位开始左移
        if 1 <= a <= 32:          # 对list的值判断范围0<a<17
            c = int(bin(b << (int(a) - 1)), 2)    # 顺序点转二进制
            d |= c                # 叠加,或运算,迭代
    e = '{:0>32b}'.format(int(bin(d).replace('0b', ''), 2))  # str-bin-去0b-int，左边补足32位
    e1 = int(str(e)[-32:-24], 2)   # 第一个8位
    e2 = int(str(e)[-24:-16], 2)   # 第二个8位
    e3 = int(str(e)[-16:-8], 2)    # 第三个8位
    e4 = int(str(e)[-8:], 2)       # 第四个8位
    msg = can.Message(arbitration_id=0x0101, data=[e4, e3, e2, e1], is_extended_id=False)
    bus.send(msg, timeout=1)
    bus.recv(timeout=1)



